/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import isViablePhoneNumber from './helpers/isViablePhoneNumber.js'
import parseNumber from './parse_.js'
import _isValidNumberForRegion from './isValidNumberForRegion_.js'

export default function isValidNumberForRegion(number, country, metadata) {
	if (typeof number !== 'string') {
		throw new TypeError('number must be a string')
	}
	if (typeof country !== 'string') {
		throw new TypeError('country must be a string')
	}
	// `parse` extracts phone numbers from raw text,
	// therefore it will cut off all "garbage" characters,
	// while this `validate` function needs to verify
	// that the phone number contains no "garbage"
	// therefore the explicit `isViablePhoneNumber` check.
	let input
	if (isViablePhoneNumber(number)) {
		input = parseNumber(number, { defaultCountry: country }, metadata)
	} else {
		input = {}
	}
	return _isValidNumberForRegion(input, country, undefined, metadata)
}